//
//  ScenarioAnimatedRefreshAPNGConfiguration.h
//  TravelGuideMdd
//
//  Created by HanFeng on 5/12/14.
//  Copyright (c) 2014 mafengwo.com. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "BaseItem.h"

typedef enum : NSUInteger {
    SAR_APNG_VerticalAlignment_Top,
    SAR_APNG_VerticalAlignment_Center,
    SAR_APNG_VerticalAlignment_Bottom,
} SAR_APNG_VerticalAlignment;

@interface ScenarioAnimatedRefreshAPNGConfiguration : NSObject

- (instancetype)initWithConfigurationJson:(MFWJson *)json;
@property (nonatomic, readonly) MFWJson *json;

@property (nonatomic, assign) BOOL isAPNGFileReady;
@property (nonatomic, strong) NSString *apngFilePath;                             // apng文件，以apng开头, 下载后或本地加载获得(非后台属性)

// apng
@property (nonatomic, strong) NSString *scenario_apng_url;                        // apng文件的url
@property (nonatomic, assign) CGFloat scenario_apng_scale;                        // apng文件的适应屏幕的比例(非后台属性)

// fps
@property (nonatomic, assign) CGFloat scenario_fps;                               // 每秒帧数
@property (nonatomic, readonly) CGFloat scenario_frameInterval;                   // (非后台属性)

// frames
@property (nonatomic, assign) NSInteger scenario_0_pull_static_frame;             // 下拉（过程中） 静态帧
@property (nonatomic, assign) NSInteger scenario_1_trigger_static_frame;          // 触发（之后） 静态帧

@property (nonatomic, assign) NSInteger scenario_2_release_start_frame;           // 释放过程 起始帧
@property (nonatomic, assign) NSInteger scenario_2_release_end_frame;             // 释放过程 结束帧

@property (nonatomic, assign) NSInteger scenario_3_loading_loop_start_frame;      // 加载循环播放 起始帧
@property (nonatomic, assign) NSInteger scenario_3_loading_loop_end_frame;        // 加载循环播放 结束帧

@property (nonatomic, assign) NSInteger scenario_4_loading_finish_start_frame;    // 加载完成结束过程 起始帧
@property (nonatomic, assign) NSInteger scenario_4_loading_finish_end_frame;      // 加载完成结束过程 结束帧
@property (nonatomic, assign) BOOL is_scenario_4_continue_from_scenario_3;        // 加载完成是否从加载循环中连续过渡到加载完成动画

@property (nonatomic, assign) NSInteger scenario_5_refresh_up_static_frame;       // 刷新完成（收起过程中） 静态帧

// timer
@property (nonatomic, readonly) NSTimeInterval scenario_2_release_min_duration;     // (非后台属性)
@property (nonatomic, assign) NSTimeInterval scenario_3_loading_loop_min_duration;  // 循环最小时间 秒
@property (nonatomic, assign) NSTimeInterval scenario_4_loading_finish_min_duration;// 加载完成结束过程最小时间 秒

// color
@property (nonatomic, strong) UIColor *apng_backgroundColor;                        // apng图片背景色
@property (nonatomic, strong) UIColor *refresh_backgroundColor;                     // 下拉刷新整体背景色，包括过度拉出的上部区域

// position
@property (nonatomic, assign) BOOL is_scenario_position_customized;                 // 是否开启个性化位置定制
@property (nonatomic, assign) CGFloat scenario_position_offset_x;                   // apng图片位置x偏移
@property (nonatomic, assign) BOOL is_scenario_position_forced_center_horizontal;   // apng是否强制横向居中，YES的话忽略x偏移
@property (nonatomic, assign) CGFloat scenario_position_size_ratio;                 // apng图片宽高等比缩放的比例

@property (nonatomic, assign) SAR_APNG_VerticalAlignment scenario_apng_vertical_alignment; // apng图片下拉后位置的纵向对齐位置（顶部，居中，底部）

@property (nonatomic, assign) CGFloat refresh_vertical_offset;                      // 整个下拉刷新区域的纵向偏移（不包括背景）

// refresh state
@property (nonatomic, assign) CGFloat scenario_loading_height;                      // 下拉加载时的显示区域的高度
@property (nonatomic, assign) CGFloat scenario_trigger_height;                      // 下拉时触发“释放刷新”的距离


// metadata & extentions
@property (nonatomic, strong) NSString *configurationId;                            // id
@property (nonatomic, strong) NSString *scenarioPageName;                           // 使用的页面名称（暂时不用）
@property (nonatomic, strong) NSString *scenarioFilterKey;                          // 使用的页面名称（暂时不用）
@property (nonatomic, assign) BOOL useForDebug;                                     // 是否调试模式（!调试必须使用上线模式!）
@property (nonatomic, assign) BOOL isOnline;                                        // 是否上线

@property (nonatomic, assign) NSTimeInterval startTime;
@property (nonatomic, assign) NSTimeInterval endTime;
- (BOOL)isOutOfDate;

@end
